本系列是初階的 Rust 學習歷程。
適合和我一樣有一些 GC(garbage collection)、Stack、Linked List 等等基本觀念,不過沒有接觸過強型別語言、低階語言、靜態語言的初階工程師。
目標是理解 Rust 的寫法,搞懂每一行 code 背後做了什麼,以及了解 Rust 的整體設計。
我會當成自己的學習日記來寫,應用的部分應該不會太多,因為我希望這次能盡量搞懂一些細節,所以會用盡量簡短的程式範例配合一些情境舉例以及做一些嘗試觀察 Rust 的行為。
至於會介紹到哪些自己其實也不太確定,就看情況,不過至少會有所有權完整的講解,以及遇到編譯錯誤要怎麼理解他的錯誤訊息和做修正。
如果內容有誤或是說明不清楚的地方,歡迎多指教及討論,希望可以幫到和去年的我一樣還在觀望 Rust 的人,我們一起開始學 Rust 吧!
大概一年前和朋友的一次讀書會的主題是 “A Chat System”,我們那時候就找了一些 Discord 的文章來研究,然後其中一篇有提到他們用 Rust 這個語言來 Refactor 既有服務的前因後果。
那時候看到最神奇的是,Rust 沒有 garbage collection 的機制,卻又可以做到 guarantee memory-safety,就很好奇他是怎麼做的。
筆者工作上用的主要是 JavaScript ,偶爾一些 Python,稍微看了一下 Rust: 靜態型、強型別、底層語言,各方面來說 Rust 都是另外一個極端了🤣,再加上也很久沒有用文字表達和記錄,覺得這是了解一下平常工作接觸不到的東西的好機會。
剛好前陣子又發生微軟全球大當機的事件,起因是網路安全公司CrowdStrike驅動軟體更新程式出現常見的空指標 bug,讓 Rust 又被拿出來討論一番,看到有人提到如果是用 Rust 就可以避免這種情況,就很好奇為什麼,這次學習 Rust 的動機裡好奇心的比例佔不少。
Rust 的官網上也有一樣的標語: Why Rust
簡單來說可以總結為三個方面:效能(Performance)、可靠性(Reliability) 以及生產力(Productivity)。
效能 : Rust 在性能上十分優秀,能夠有效利用系統資源,因此特別適合在嵌入式系統或需要極高效能的場景下使用。例如,Discord 就是著名的 Rust 使用案例,展示了其在需要高效能的後端服務中的應用。
可靠性: Rust 獨特的所有權機制 (ownership model),加上其強大的編譯器檢查,能在編譯階段幫助開發者發現許多潛在的錯誤。通過這些機制,Rust 幾乎能保證記憶體安全 (memory safety) 和執行緒安全 (thread safety),從而減少了許多常見的運行時錯誤。
生產力: Rust 提供了優秀的文檔、明確的編譯錯誤訊息以及強大的型別推斷機制。此外,Rust 的lint 工具和代碼格式化工具等功能提升了開發體驗,不過我覺得這是在熟悉 Rust 之後,熟悉前學習曲線是著命的陡峭,在掌握所有權和編譯器檢查機制前生產力有限,不過一旦克服這些挑戰,就可以感受到 Rust 良好的開發體驗。
最後來安裝 Rust 結束第一天。
根據官網,一個指令完成安裝 Rust 以及版控工具:
$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
筆者使用的是 macOS 作業系統 ,安裝完 Rust 所有相關的工具都會在 ~/.cargo/bin
底下,可以看到有 rustc
、 cargo
、和 rustup
等等工具。
之後執行:
$ rustc --version
確認有正常跑出版本就告一段落啦。
如果無法執行,官網有提到很有可能是 PATH
環境變數設定錯誤,大部分的情況安裝 rustup
的時候就會自動設定了,可以先檢查是不是設定的問題。
最後記錄一下未來如果要更新或移除 Rust:
更新的指令:
$ rustup update
解除安裝的指令:
$ rustup self uninstall
實際執行看看
Thanks for hacking in Rust!
This will uninstall all Rust toolchains and data, and remove
$HOME/.cargo/bin from your PATH environment variable.
Continue? (y/N) y
info: removing rustup home
info: removing cargo home
info: removing rustup binaries
info: rustup is uninstalled
Bye Bye Rust,系列(完)......才怪,現在才要開始啦👻
從安裝和解除安裝的過程,目前對 Rust 的印象就是滿細心,各種指令的說明和解釋都滿清楚的。
當然解除安裝之後馬上裝回來面對現實囉XD